Redis Lua Scripting একটি শক্তিশালী বৈশিষ্ট্য যা রেডিসের ক্লায়েন্ট-সার্ভারের মধ্যকার যোগাযোগের সংখ্যা কমাতে এবং একযোগভাবে একাধিক রেডিস কমান্ড একত্রিত করে দ্রুততার সাথে কার্যকরী অপারেশন সম্পাদন করতে সহায়তা করে। Lua স্ক্রিপ্টিংয়ের মাধ্যমে আপনি একাধিক রেডিস কমান্ডকে একটি একক স্ক্রিপ্টে একত্রিত করতে পারেন, যা সার্ভারের উপর কম লোড ফেলবে এবং পারফরম্যান্স বাড়াবে।
EVAL কমান্ডের মাধ্যমে আপনি Lua স্ক্রিপ্ট রেডিস সার্ভারে রান করতে পারেন। এটি একটি Lua স্ক্রিপ্ট এবং তার আর্গুমেন্ট হিসেবে দেওয়া হয়।
কমান্ড সিনট্যাক্স:
EVAL <script> <num_keys> <key1> <key2> ... <keyN> <arg1> <arg2> ... <argN>
<script>
: Lua স্ক্রিপ্ট।<num_keys>
: কতটি কিপেয়ার স্ক্রিপ্টে ব্যবহার করা হবে।<key1>
, <key2>
, ... <keyN>
: কিপেয়ার নাম।<arg1>
, <arg2>
, ... <argN>
: স্ক্রিপ্টে পাস করা আর্গুমেন্টস।উদাহরণ:
EVAL "return redis.call('set', KEYS[1], ARGV[1])" 1 mykey "Hello Lua"
এটি mykey
কিপেয়ারকে Hello Lua
ভ্যালু দিয়ে সেট করবে। এখানে:
1
- 1টি কিপেয়ার ব্যবহার করা হচ্ছে।mykey
- কিপেয়ার নাম।"Hello Lua"
- ভ্যালু।EVALSHA কমান্ড Lua স্ক্রিপ্টের SHA1 হ্যাশ ব্যবহার করে স্ক্রিপ্ট রান করে। এটি তখন ব্যবহৃত হয় যখন স্ক্রিপ্টটি বেশ বার রান করা হবে এবং হ্যাশড স্ক্রিপ্ট ব্যবহারের ফলে পারফরম্যান্স আরও বৃদ্ধি পায়।
কমান্ড সিনট্যাক্স:
EVALSHA <sha1> <num_keys> <key1> <key2> ... <keyN> <arg1> <arg2> ... <argN>
<sha1>
: Lua স্ক্রিপ্টের SHA1 হ্যাশ।উদাহরণ:
EVALSHA <sha1> 1 mykey "Hello from SHA"
এখানে <sha1>
হবে সেই স্ক্রিপ্টের হ্যাশ যা প্রথমে SCRIPT LOAD কমান্ড দিয়ে রেডিস সার্ভারে লোড করা হয়েছিল।
ধরা যাক, আপনি একই সময়ে একটি কিপেয়ার সেট এবং একটি কিপেয়ার গেট করতে চান। আপনি দুটি রেডিস কমান্ড একসাথে একটি Lua স্ক্রিপ্টে একত্রিত করতে পারেন।
EVAL "redis.call('set', KEYS[1], ARGV[1]) redis.call('get', KEYS[1])" 1 mykey "LuaTest"
এটি প্রথমে mykey
কিপেয়ারকে LuaTest
দিয়ে সেট করবে, তারপর সেট করা কিপেয়ারের মান রিটার্ন করবে।
আপনি শর্ত ভিত্তিক অপারেশনও করতে পারেন, যেমন যদি কিপেয়ারটি ইতিমধ্যে একটি নির্দিষ্ট ভ্যালু ধারণ করে, তবে অন্য একটি কাজ সম্পন্ন করতে পারেন:
EVAL "if redis.call('get', KEYS[1]) == ARGV[1] then redis.call('set', KEYS[2], ARGV[2]) end" 2 mykey value1 mynewkey value2
এটি প্রথমে mykey
কিপেয়ারটির মান value1
এর সাথে তুলনা করবে, যদি সত্য হয় তবে mynewkey
কিপেয়ারটি value2
দিয়ে সেট করবে।
আপনি সহজেই কিপেয়ার একটি নির্দিষ্ট মান বাড়ানোর জন্য Lua স্ক্রিপ্ট ব্যবহার করতে পারেন:
EVAL "return redis.call('incr', KEYS[1])" 1 counter
এটি counter
কিপেয়ারটির মান ১ বৃদ্ধি করবে।
Redis Lua Scripting একটি শক্তিশালী ফিচার যা একাধিক রেডিস কমান্ড একত্রিত করে এবং সার্ভারে একযোগভাবে কার্যকরী অপারেশন পরিচালনা করতে সাহায্য করে। এটি পারফরম্যান্স উন্নত করতে সহায়ক, কারণ একাধিক অপারেশন সার্ভারে একত্রে চলে এবং ক্লায়েন্ট-সার্ভারের মধ্যে যোগাযোগের পরিমাণ কমে। EVAL
এবং EVALSHA
কমান্ডের মাধ্যমে আপনি Lua স্ক্রিপ্ট তৈরি এবং রান করতে পারেন, এবং এটি দ্রুত এবং এটমিক অপারেশন নিশ্চিত করে।
Redis Lua Scripting রেডিসে অ্যাটমিক অপারেশন সম্পাদন করতে একটি শক্তিশালী বৈশিষ্ট্য। Lua হল একটি দ্রুত এবং শক্তিশালী স্ক্রিপ্টিং ভাষা, যা রেডিসের সাথে একীভূত হয়ে কমপ্লেক্স অপারেশন সঞ্চালন করার জন্য ব্যবহৃত হয়। Lua স্ক্রিপ্টিং ব্যবহারের মাধ্যমে একাধিক রেডিস কমান্ড একত্রে একটি একক ট্রানজেকশনে সম্পাদিত হয়, যা নিশ্চিত করে যে অপারেশনগুলো অ্যাটমিক (Atomic) হবে এবং ডেটা সঠিকভাবে আপডেট হবে।
রেডিস Lua স্ক্রিপ্টিং EVAL এবং EVALSHA কমান্ডের মাধ্যমে করা হয়। Lua স্ক্রিপ্ট রেডিস সার্ভারে রান করার জন্য কমান্ডগুলো ব্যবহার করতে হয়, এবং এটি আপনাকে একাধিক রেডিস অপারেশন একসাথে সম্পাদন করার সুযোগ দেয়।
EVAL
কমান্ডের মাধ্যমে Lua স্ক্রিপ্ট রেডিসে এক্সিকিউট করা হয়। এই কমান্ডের মাধ্যমে স্ক্রিপ্টের কোড এবং স্ক্রিপ্টে ব্যবহৃত কিপেয়ার এবং তাদের মান পাস করা হয়।
EVAL "return redis.call('set', KEYS[1], ARGV[1])" 1 mykey "Hello Redis"
SET
কমান্ড এক্সিকিউট করে।এই স্ক্রিপ্টটি mykey
নামে একটি কিপেয়ারে "Hello Redis" মান সংরক্ষণ করবে।
একই Lua স্ক্রিপ্ট বারবার ব্যবহৃত হলে, আপনি স্ক্রিপ্টের SHA1 হ্যাশ ব্যবহার করে EVALSHA
কমান্ড দিয়ে স্ক্রিপ্ট চালাতে পারেন। এটি স্ক্রিপ্ট ক্যাশিং নিশ্চিত করে এবং স্ক্রিপ্টের পুনরায় লোড করার সময় বাঁচায়।
প্রথমে EVAL
দিয়ে স্ক্রিপ্ট রান করা হয় এবং তার SHA1 হ্যাশ সংগ্রহ করা হয়।
EVAL "return redis.call('set', KEYS[1], ARGV[1])" 1 mykey "Hello Redis"
এখানে SHA1 হ্যাশ পাওয়া যাবে এবং পরবর্তীতে EVALSHA
কমান্ড ব্যবহার করে সেই স্ক্রিপ্ট রান করতে পারবেন।
EVALSHA <SHA1_hash> 1 mykey "Hello Redis"
এই Lua স্ক্রিপ্টে প্রথমে একটি কিপেয়ারের মান চেক করা হয়, এবং যদি তা না থাকে তবে সেট করা হয়।
EVAL "
local current = redis.call('get', KEYS[1])
if not current then
redis.call('set', KEYS[1], ARGV[1])
return 'set'
else
return 'exists'
end
" 1 mykey "Hello Redis"
mykey
কিপেয়ারের মান চেক করা হয়।"set"
রিটার্ন করা হয়।"exists"
রিটার্ন করা হয়।এই Lua স্ক্রিপ্টটি একটি নির্দিষ্ট কিপেয়ারের মান ইনক্রিমেন্ট করবে এবং পরবর্তী মান রিটার্ন করবে।
EVAL "
local current = redis.call('incr', KEYS[1])
return current
" 1 mycounter
mycounter
কিপেয়ারের মান 1 বৃদ্ধি করবে এবং পরবর্তী মান রিটার্ন করবে।একাধিক কিপেয়ারে একই সময়ে অ্যাকশন করতে Lua স্ক্রিপ্টের মাধ্যমে করা যায়।
EVAL "
redis.call('set', KEYS[1], ARGV[1])
redis.call('set', KEYS[2], ARGV[2])
return 'OK'
" 2 key1 key2 "value1" "value2"
key1
এবং key2
কিপেয়ারে যথাক্রমে "value1"
এবং "value2"
সেট করা হবে।Redis Lua Scripting রেডিসের একটি শক্তিশালী বৈশিষ্ট্য, যা অ্যাটমিক অপারেশন, কাস্টম লজিক এবং উচ্চ পারফরম্যান্স সাপোর্ট করে। Lua স্ক্রিপ্টের মাধ্যমে আপনি একাধিক রেডিস কমান্ড একত্রে কার্যকর করতে পারেন এবং রেডিসের কাজের পরিধি আরও বাড়াতে পারেন। তবে, এটি ব্যবহার করার সময় কিছু সীমাবদ্ধতা এবং সাবধানতা অবলম্বন করা উচিত, যেমন মেমরি ব্যবস্থাপনা এবং স্ক্রিপ্টের কার্যক্ষমতা।
Redis-এ EVAL এবং EVALSHA কমান্ডের মাধ্যমে Scripts Execute করা হল Redis-এ Lua স্ক্রিপ্ট চালানোর একটি পদ্ধতি। Redis Lua স্ক্রিপ্ট চালানোর জন্য EVAL এবং EVALSHA কমান্ড ব্যবহার করা হয়। এটি রেডিস সার্ভারে একটি একক অ্যাটমিক অপারেশন হিসেবে একাধিক Redis কমান্ড একসাথে চালানোর সুবিধা দেয়। এই স্ক্রিপ্টগুলি সাধারণত পারফরম্যান্স বাড়ানোর জন্য এবং একাধিক কমান্ডকে একত্রে কার্যকর করতে ব্যবহৃত হয়।
EVAL কমান্ড Lua স্ক্রিপ্ট রান করার জন্য ব্যবহৃত হয়। এর মাধ্যমে আপনি সরাসরি একটি Lua স্ক্রিপ্ট Redis সার্ভারে পাঠাতে পারেন এবং সেই স্ক্রিপ্টের ফলাফল ফেরত পেতে পারেন।
EVAL <lua-script> <num-keys> <key1> <key2> ... <keyN> <arg1> <arg2> ... <argM>
<lua-script>
: এটি Lua স্ক্রিপ্ট যা Redis-এ এক্সিকিউট হবে।<num-keys>
: এটি সেই কিপেয়ারগুলোর সংখ্যা যা স্ক্রিপ্টে ব্যবহৃত হবে।<key1>, <key2>, ..., <keyN>
: এই কিপেয়ারগুলোর মধ্যে Redis কিপেয়ার অন্তর্ভুক্ত থাকে যেগুলি স্ক্রিপ্টের ভিতরে ব্যবহৃত হবে।<arg1>, <arg2>, ..., <argM>
: এই আর্গুমেন্টগুলো Lua স্ক্রিপ্টে ব্যবহৃত হবে।EVAL "redis.call('SET', KEYS[1], ARGV[1]) return redis.call('GET', KEYS[1])" 1 mykey "Hello Redis"
mykey
কিপেয়ার সেট করবে "Hello Redis" ভ্যালুর সাথে এবং তারপর সেই কিপেয়ারটির মান (value) রিটার্ন করবে।EVAL "return redis.call('HGET', KEYS[1], ARGV[1])" 1 myhash field1
myhash
থেকে field1
এর মান রিটার্ন করবে।EVALSHA কমান্ড Lua স্ক্রিপ্ট রান করতে ব্যবহৃত হয়, তবে এটি Lua স্ক্রিপ্টের SHA1 হ্যাশ ব্যবহার করে। এটি তখন ব্যবহার করা হয় যখন আপনি Lua স্ক্রিপ্টটি একবার Redis-এ কম্পাইল করেছেন এবং সেই স্ক্রিপ্টের SHA1 হ্যাশের মাধ্যমে ভবিষ্যতে তা কল করতে চান। এটি পারফরম্যান্স অপ্টিমাইজেশন-এর জন্য ব্যবহৃত হয় কারণ Redis একটি স্ক্রিপ্টের SHA1 হ্যাশ মেমরিতে সংরক্ষণ করে, ফলে স্ক্রিপ্টটি আবার কম্পাইল করা না লাগে।
EVALSHA <sha1> <num-keys> <key1> <key2> ... <keyN> <arg1> <arg2> ... <argM>
<sha1>
: এটি Lua স্ক্রিপ্টের SHA1 হ্যাশ।<num-keys>
: এটি সেই কিপেয়ারগুলোর সংখ্যা যা স্ক্রিপ্টে ব্যবহৃত হবে।<key1>, <key2>, ..., <keyN>
: এই কিপেয়ারগুলো স্ক্রিপ্টে ব্যবহৃত হবে।<arg1>, <arg2>, ..., <argM>
: স্ক্রিপ্টে ব্যবহৃত আর্গুমেন্ট।প্রথমে Lua স্ক্রিপ্টটি Redis-এ এক্সিকিউট করুন এবং তার SHA1 হ্যাশ বের করুন:
EVAL "redis.call('SET', KEYS[1], ARGV[1]) return redis.call('GET', KEYS[1])" 1 mykey "Hello Redis"
এবার, স্ক্রিপ্টের SHA1 হ্যাশ পেতে:
SCRIPT LOAD "redis.call('SET', KEYS[1], ARGV[1]) return redis.call('GET', KEYS[1])"
Redis একটি SHA1 হ্যাশ রিটার্ন করবে, যেমন:
"e9aee3e7f3b43080bdf647ffb4a94082a80cfecc"
এখন, EVALSHA ব্যবহার করে স্ক্রিপ্টটি রান করুন:
EVALSHA e9aee3e7f3b43080bdf647ffb4a94082a80cfecc 1 mykey "Hello Redis"
Redis-এ Lua স্ক্রিপ্ট এক্সিকিউট করার জন্য EVAL এবং EVALSHA কমান্ড ব্যবহৃত হয়। EVAL কমান্ডের মাধ্যমে আপনি সরাসরি Lua স্ক্রিপ্ট Redis-এ পাঠিয়ে এক্সিকিউট করতে পারেন, আর EVALSHA কমান্ড ব্যবহৃত হয় যখন স্ক্রিপ্টের SHA1 হ্যাশ মেমরিতে সংরক্ষণ করা থাকে, এবং এটি আরও দ্রুত এবং কার্যকরী ভাবে স্ক্রিপ্ট এক্সিকিউট করার জন্য ব্যবহৃত হয়।
Redis Lua Scripting একটি শক্তিশালী টুল যা Redis-এ complex operations এবং atomic transactions করতে ব্যবহৃত হয়। Lua স্ক্রিপ্টিং Redis-এ অন্তর্ভুক্ত করা হয়েছে, যার মাধ্যমে আপনি একাধিক Redis কমান্ড একে অপরের সাথে অ্যাটমিকভাবে একত্রিত করতে পারেন, অর্থাৎ সমস্ত অপারেশন একযোগে সম্পন্ন হবে এবং এর মাঝে কোনো বিরতি আসবে না। এটি বিশেষ করে এমন অবস্থায় কার্যকর যেখানে অনেক Redis কমান্ড একসাথে কার্যকর করা দরকার এবং একাধিক কমান্ডের মধ্যকার সময় ব্যবধানের কারণে সমস্যা হতে পারে।
Redis Lua স্ক্রিপ্টিং ব্যবহার করার মাধ্যমে আপনি Redis কমান্ডগুলিকে একত্রিত করে একটি একক স্ক্রিপ্টের মধ্যে কার্যকর করতে পারেন, যা একাধিক Redis অপারেশনকে একত্রিত করে। এটি atomic (অ্যাটমিক) কার্যকর হয়, অর্থাৎ স্ক্রিপ্টটি পুরোপুরি সম্পন্ন না হওয়া পর্যন্ত কোনো অপারেশনই কমপ্লিট হবে না।
Redis Lua স্ক্রিপ্টিংয়ের মাধ্যমে আপনি complex operations যেমন ডেটা প্রসেসিং, ক্যালকুলেশন, কন্ডিশনাল লজিক, লুপিং ইত্যাদি সম্পন্ন করতে পারেন।
Redis Lua স্ক্রিপ্টগুলি Redis-এ EVAL
কমান্ডের মাধ্যমে চালানো হয়। এই কমান্ডটি আপনাকে Lua স্ক্রিপ্টটি Redis সার্ভারে এক্সিকিউট করতে সাহায্য করে। এর সাধারণ সিনট্যাক্স:
EVAL "lua_script" numkeys key [key ...] arg [arg ...]
Redis Lua সিস্টেমে complex operations সম্পন্ন করতে বেশ কিছু সাধারণ উদাহরণ দেওয়া হলো:
ধরা যাক, আমাদের একটি কাউন্টার আছে এবং আমরা চাই যে কাউন্টারের মান প্রতি ১০ সেকেন্ড পর বাড়ানোর পাশাপাশি তার মেয়াদও শেষ হয়ে যাক। এটা Lua স্ক্রিপ্টের মাধ্যমে করা যেতে পারে:
EVAL "
if redis.call('exists', KEYS[1]) == 1 then
redis.call('incr', KEYS[1])
else
redis.call('set', KEYS[1], 1)
redis.call('expire', KEYS[1], 10)
end
return redis.call('get', KEYS[1])
" 1 counter
counter
কীটি আগে থেকেই রয়েছে কিনা।একটি atomic transaction এর উদাহরণ যেখানে একাধিক key-তে একসাথে অপারেশন কার্যকর করা হবে, যেমন একটি user_balance
থেকে amount
ডেবিট করা এবং অন্য একটি transaction_log
এ লোগিং করা:
EVAL "
local balance = redis.call('get', KEYS[1])
if tonumber(balance) >= tonumber(ARGV[1]) then
redis.call('decrby', KEYS[1], ARGV[1])
redis.call('rpush', KEYS[2], 'Debit: ' .. ARGV[1])
return balance - ARGV[1]
else
return 'Insufficient balance'
end
" 2 user_balance transaction_log 50
একই Lua স্ক্রিপ্টে একাধিক কন্ডিশন চেক করা এবং কী গুলোর মান আপডেট করা:
EVAL "
local val1 = redis.call('get', KEYS[1])
local val2 = redis.call('get', KEYS[2])
if val1 == 'active' and val2 == 'available' then
redis.call('set', KEYS[3], 'success')
else
redis.call('set', KEYS[3], 'failure')
end
return redis.call('get', KEYS[3])
" 3 status1 status2 result
ধরা যাক, আমরা একটি লিস্টে প্রথমে কিছু এলিমেন্ট যোগ করতে চাই এবং পরে সেগুলো ডিলিট করতে চাই। নিচের স্ক্রিপ্টটি এ কাজটি করতে পারে:
EVAL "
redis.call('rpush', KEYS[1], ARGV[1])
redis.call('rpush', KEYS[1], ARGV[2])
redis.call('lpop', KEYS[1])
return redis.call('lrange', KEYS[1], 0, -1)
" 1 mylist item1 item2
item1
এবং item2
লিস্টে যোগ করা হচ্ছে, তারপর প্রথম এলিমেন্ট (item1
) লিস্ট থেকে মুছে ফেলা হচ্ছে।Redis Lua Scripting হল এক শক্তিশালী টুল যা Redis-এ complex operations অ্যাটমিকভাবে সম্পন্ন করতে সাহায্য করে। Lua স্ক্রিপ্টিং ব্যবহারের মাধ্যমে আপনি একাধিক Redis কমান্ডকে একত্রিত করে, কন্ডিশনাল লজিক প্রয়োগ করে এবং ডেটা প্রক্রিয়াকরণে উন্নতি করতে পারেন।
Lua Scripting Redis-এ একটি শক্তিশালী বৈশিষ্ট্য, যা Redis সার্ভারে server-side scripting এর মাধ্যমে কাস্টম লজিক এবং প্রসেসিং ক্ষমতা যোগ করে। তবে, যেহেতু এটি রেডিস সার্ভারের মধ্যে চলে, তাই এটি পারফরম্যান্সের উপর প্রভাব ফেলতে পারে। Lua scripting performance এবং optimization অত্যন্ত গুরুত্বপূর্ণ, বিশেষত যদি আপনি বড় অ্যাপ্লিকেশন বা সিস্টেম পরিচালনা করেন যেখানে গতি এবং স্কেলিং গুরুত্বপূর্ণ।
Redis-এ Lua scripting ব্যবহৃত হয় মূলত ডেটা ম্যানিপুলেশন এবং কাস্টম লজিক বাস্তবায়ন করতে। Redis সেন্ট্রালাইজড ডেটা স্টোর হিসেবে কাজ করার সময়, যদি কোন অতিরিক্ত কার্যক্রম (যেমন কাস্টম ক্যালকুলেশন বা ডেটা প্রক্রিয়া) করতে হয়, তবে তা Lua স্ক্রিপ্টের মাধ্যমে করা হয়।
Redis EVAL এবং EVALSHA কমান্ড ব্যবহার করে Lua স্ক্রিপ্ট এক্সিকিউট করা হয়। Lua স্ক্রিপ্ট সম্পূর্ণভাবে Redis সার্ভারে চলে, যেটি একটি আণবিক (atomic) এক্সিকিউশন নিশ্চিত করে এবং সব ডেটা সাইটের মধ্যে স্থানান্তর কমিয়ে দেয়।
এখানে কয়েকটি প্রধান পারফরম্যান্স সমস্যা উল্লেখ করা হচ্ছে, যেগুলো Lua স্ক্রিপ্ট চালানোর সময় হতে পারে:
এখন আমরা দেখব কিভাবে আপনি Lua স্ক্রিপ্টের পারফরম্যান্স অপ্টিমাইজ করতে পারেন।
Best Practice: যতটা সম্ভব Redis কমান্ডগুলি Lua স্ক্রিপ্টের বাইরে রাখুন এবং একাধিক কমান্ডকে একত্রিত করুন। প্রতিটি Redis কমান্ডে সার্ভারকে একবার করতে বলার পরিবর্তে, একাধিক অপারেশনকে একত্রিত করে একটি Lua স্ক্রিপ্টে একসাথে এক্সিকিউট করুন।
Bad Approach: একাধিক Redis কমান্ড একে একে চালানো
redis.call("HGET", "hashKey", "field1")
redis.call("HGET", "hashKey", "field2")
Optimized Approach: একটিতে একত্রিত করা
local val1 = redis.call("HGET", "hashKey", "field1")
local val2 = redis.call("HGET", "hashKey", "field2")
Best Practice: খুব বড় ডেটার উপর লুপ করা থেকে এড়িয়ে চলুন, কারণ এটি কর্মক্ষমতা ক্ষতিগ্রস্ত করতে পারে।
Bad Approach: বড় লিস্ট বা হ্যাশের উপর একে একে কাজ করা।
local result = {}
for i=1,10000 do
result[i] = redis.call("HGET", "myhash", i)
end
Optimized Approach: একসাথে বড় ডেটা রিট্রিভ করা এবং কাজ করা।
local result = redis.call("HMGET", "myhash", unpack(keys))
EVALSHA
Instead of EVAL
Best Practice: যখন Lua স্ক্রিপ্ট একবার Redis সার্ভারে আপলোড হয়ে যায়, তখন স্ক্রিপ্টের হ্যাশ ব্যবহার করে পুনরায় একই স্ক্রিপ্ট চালানো EVALSHA
কমান্ডের মাধ্যমে করা হয়। এটি EVAL
কমান্ডের তুলনায় অনেক দ্রুত এবং কার্যকরী।
EVALSHA কমান্ড Redis সার্ভারের অভ্যন্তরীণ হ্যাশ ব্যবহার করে স্ক্রিপ্টের ক্যাশড সংস্করণ রিফারেন্স করে, ফলে স্ক্রিপ্টের এক্সিকিউশন টাইম কমে যায়।
local script = "return redis.call('GET', 'mykey')"
local sha1 = redis.sha1hex(script)
redis.call('EVALSHA', sha1, 0)
Best Practice: যতটা সম্ভব Redis-এর complex data structures যেমন list
, set
, sorted set
-এর মধ্যে লুপ বা জটিল কাজ থেকে বিরত থাকুন। যদি এটি অপরিহার্য হয় তবে ডেটাকে একটি ছোট আকারে সীমাবদ্ধ রাখুন এবং পরবর্তী পর্যায়ে ক্যাশে ব্যবহার করুন।
Best Practice: Blocking commands (যেমন BRPOP
, BLPOP
, XREAD
) Lua স্ক্রিপ্টে ব্যবহারের সময় সার্ভারের ব্লকিং ইস্যু সৃষ্টি হতে পারে। এগুলির ব্যবহার কমিয়ে দিন এবং ব্যাকগ্রাউন্ডে হালকা কাজ করা নিশ্চিত করুন।
GET
, SET
, HGET
ইত্যাদি ব্যবহার করতে পারেন।Best Practice: রেডিসের slowlog ব্যবহার করে Lua স্ক্রিপ্টের পারফরম্যান্স পরিমাপ এবং মনিটর করুন। এটি আপনাকে স্লো বা সময়সাপেক্ষ স্ক্রিপ্ট শনাক্ত করতে সহায়তা করবে।
SLOWLOG GET 10 # গত ১০টি স্লো কমান্ড দেখবে
এছাড়াও, আপনি Redis INFO কমান্ডের মাধ্যমে সার্ভারের বর্তমান অবস্থাও চেক করতে পারেন:
INFO persistence
এতে পারফরম্যান্স সম্পর্কিত ডেটা, যেমন, শেষ RDB স্ন্যাপশটের সময়, AOF সিঙ্ক টাইম ইত্যাদি পাবেন।
MGET
, MSET
, HMGET
ইত্যাদি ব্যবহার করা।Lua Scripting Redis-এ অত্যন্ত শক্তিশালী একটি টুল, যা আপনার ডেটা প্রক্রিয়াকরণ দক্ষতা বৃদ্ধি করে এবং server-side computation করার সুযোগ দেয়। তবে, এটি যদি সঠিকভাবে অপটিমাইজ না করা হয়, তবে এটি Redis সার্ভারের পারফরম্যান্সে নেতিবাচক প্রভাব ফেলতে পারে। Lua scripting performance বাড়ানোর জন্য, আপনাকে:
এই অপ্টিমাইজেশন কৌশলগুলির মাধ্যমে আপনি Redis-এ Lua স্ক্রিপ্টিং এর পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে পারবেন।
Read more